package com.atguigu.bigdata.scala.chapter05

object Scala07_Function_Hell_2 {

    def main(args: Array[String]): Unit = {

        // TODO 函数式编程 - 地狱

        // TODO 2. 将函数作为参数来使用

        // val f : ()=>Unit = fun1

        /*

           User user = new User()

           public void test( User user ) {

           }

           test(user);

         */

        // 如果函数的参数声明为函数，那么调用时，就需要将另外一个函数作为整体传到当前函数中
        def fun1(): Unit = {
            println("fun1...")
        }

        def test( f : ()=>Unit ): Unit = {
            f()
        }

        //test(fun1 _)
        //test(fun1)
        def fun2( name : String ): String = {
            name.trim
        }

        def test2(f:(String)=>String): Unit = {
            val result = f(" zhangsan ")
            println("!" + result + "!")
        }

        test2(fun2)

        // 函数的嵌套
        def test22(): Unit = {
            def fun22(): Unit = {

            }
            fun22()
        }

        println("************************************")
        def sum(x:Int, y:Int): Int = {
            x + y
        }
        def multi(x:Int, y:Int): Int = {
            x * y
        }
        def test3( f : (Int, Int)=>Int ): Unit = {

            val result = f (10, 20)
            println(result)
        }

        // 将函数作为参数来使用，让功能更具备扩展性
        test3(sum)
        test3(multi)


    }
}
